package com.itany.corejava.code05_数组;

import java.util.Arrays;

/**
 * @author 石小俊
 * @date 2024年01月11日 16:36
 */
public class Test07_值传递与引用传递 {
    public static void main(String[] args) {
        // 值传递
        // 在栈中开辟一块空间存储i,其值为1
        int i = 1;
        // 在栈中开辟一块空间存储i2,其值与栈中i的值一致,也是1
        // 此时在栈中共存在两个空间,互不干涉
        int i2 = i;
        // 将i2空间的值改为了2,此时对i没有影响
        i2 = 2;
        System.out.println(i);
        System.out.println(i2);

        // 引用传递
        // 在堆中开辟了一串空间,用来存储数组所有的元素
        // 在栈中开辟了一块空间,用来存储堆中数组数据的首地址
        int[] arr = {1, 2, 3};
        // 在栈中开辟了一块空间,其值与arr一致,即:堆中数组数据的首地址
        // 实际上arr与arr2两者访问的是同一串堆空间
        int[] arr2 = arr;
        System.out.println(Arrays.toString(arr));
        System.out.println(Arrays.toString(arr2));
        // 当arr2对应的堆空间中元素发生改变时
        // arr的值也随之改变
        arr2[1] = 5;
        System.out.println(Arrays.toString(arr));
        System.out.println(Arrays.toString(arr2));
    }
}
